Functions

An interpreted function (including macro expansion functions) is represented in one of the following formats.

(lambda lambda-list . body )

A lambda-expression with null lexical environment and with no implicit block around it. This type of function typically appears when `(lambda lambda-list . body ) is evaluated.

(lambda-block block-name lambda-list . body )

A lambda-expression with null lexical environment but with an implicit block around it. This type of function typically appears when (defun function-name lambda-list . body ) is evaluated. In this case, block-name is identical to function-name .

(lambda-closure env1 env2 env3 lambda-list . body )

A lambda-expression with lexical environments but with no implicit block around it. This type of function typically appears when #`(lambda lambda-list . body ) (or, equivalently, (function (lambda lambda-list . body )) ) is evaluated. env1 , env2 , and env3 represent the variable bindings, the local function/macro definitions, and the tag/block-name establishments, respectively, at the time the closure was created.

(lambda-block-closure env1 env2 env3 block-name lambda-list . body )

A lambda-expression with lexical environments and with an implicit block around it. Local functions and local macros are represented in this format. env1 , env2 , and env3 represent the variable bindings, the local function/macro bindings, and the tag/block-name establishments, respectively, at the time the local function/macro was created by flet, labels, or macrolet. The block-name is identical to the local function/macro name.

Compiled functions (including compiled macro-expansion functions) are printed in the following formats.



#<compiled-function name >
or
#<compiled-closure nil>



Incidentally, the value of (symbol-function special-form-name ) is a list,



(special . address )



if special-form-name names a special form.



Common Lisp constants related to functions have the following values in KCL.

    call-arguments-limit = 64
    lambda-list-keywords = (&optional &rest &key &allow-
                            other-keys &aux &whole 
                            &environment &body)
    lambda-parameters-limit = 64
    multiple-values-limit = 32

Refer to the Common Lisp Reference Manual for their meanings.